package com.yanxu.threadpool;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author 折戟沉沙铁未销
 * @version V1.0
 * @date 2025/4/13-2025
 * @Description: 演示核心线程数可以被回收
 */
public class CoreSizerRecycle {
    //定义线程池
    public static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
            2,
            4,
            60L,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(6));


    public static void main(String[] args) {
        //设置 核心线程有超时时间，可以被回收
        //注意：如果要使用 allowCoreThreadTimeOut() 方法，那么线程池的类型应该使用 【ThreadPoolExecutor】。
        //   ExecutorService 父类 中是没有相应的方法的，
        threadPoolExecutor.allowCoreThreadTimeOut(true);

        //提交任务
        for (int i = 0; i < 10; i++) {
            int finalI = i;
            threadPoolExecutor.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+ " 任务"+ finalI +"执行完毕了!!!");
                }
            });
        }
    }
}